home *** CD-ROM | disk | FTP | other *** search
- /**
- GRAB Graph Layout and Browser System
-
- Copyright (c) 1986, 1988 Regents of the University of California
- Copyright (c) 1989, Tera Computer Company
- **/
-
- /* list.h -- definitions for lists */
-
- #ifndef list_h
- #define list_h
-
- #include "set.h"
- #include "digraph.h"
-
- typedef struct item ITEM, LIST;
- struct item
- {
- int key; /* key for this item */
- SET *set; /* set of keys */
- ITEM *prev; /* previous item */
- ITEM *next; /* next item */
- };
-
-
- #define init_list(list) list = NULL
-
- #define add_item(list, _key, _set) \
- { LIST *l;\
- new(l, LIST); l->next = list; list = l;\
- if (l->next != NULL) l->next->prev = l;\
- l->key = _key; init_set(l->set); copy_set(l->set, _set);\
- }
-
- #define remove_item(list, item) \
- { if(item == list) list = item->next;\
- else item->prev->next = item->next;\
- if (item->next != NULL) item->next->prev = item->prev;\
- dispose(item); item = NULL;\
- }
-
- #define each_item(list, item) \
- { ITEM *_next; for (item = list; item != NULL; item = _next) {\
- _next = item->next; /* in case of remove_item */
-
- #define empty_list(list) (list == NULL)
- #define Key(item) item->key
- #define Set(item) item->set
-
- #endif
-